GdkWindow *old_parent_window;
g_return_if_fail (GTK_IS_WIDGET (widget));
+ g_return_if_fail (!GTK_IS_WINDOW (widget));
old_parent_window = g_object_get_qdata (G_OBJECT (widget),
quark_parent_window);
g_object_unref (old_parent_window);
if (parent_window)
g_object_ref (parent_window);
-
- /* Unset toplevel flag when adding a parent window to a widget,
- * this is the primary entry point to allow toplevels to be
- * embeddable.
- */
- if (GTK_IS_WINDOW (widget))
- _gtk_window_set_is_toplevel (GTK_WINDOW (widget), parent_window == NULL);
}
}
}
}
-/**
- * _gtk_window_set_is_toplevel:
- * @window: a #GtkWindow
- * @is_toplevel: %TRUE if the window is still a real toplevel (nominally a
- * child of the root window); %FALSE if it is not (for example, for an
- * in-process, parented GtkPlug)
- *
- * Internal function used by #GtkPlug when it gets parented/unparented by a
- * #GtkSocket. This keeps the @window’s #GTK_WINDOW_TOPLEVEL flag in sync
- * with the global list of toplevel windows.
- */
-void
-_gtk_window_set_is_toplevel (GtkWindow *window,
- gboolean is_toplevel)
-{
- GtkWidget *widget;
- GtkWidget *toplevel;
-
- widget = GTK_WIDGET (window);
-
- if (_gtk_widget_is_toplevel (widget))
- g_assert (g_slist_find (toplevel_list, window) != NULL);
- else
- g_assert (g_slist_find (toplevel_list, window) == NULL);
-
- if (is_toplevel == _gtk_widget_is_toplevel (widget))
- return;
-
- if (is_toplevel)
- {
- /* Pass through regular pathways of an embedded toplevel
- * to go through unmapping and hiding the widget before
- * becomming a toplevel again.
- *
- * We remain hidden after becomming toplevel in order to
- * avoid problems during an embedded toplevel's dispose cycle
- * (When a toplevel window is shown it tries to grab focus again,
- * this causes problems while disposing).
- */
- gtk_widget_hide (widget);
-
- /* Save the toplevel this widget was previously anchored into before
- * propagating a hierarchy-changed.
- *
- * Usually this happens by way of gtk_widget_unparent() and we are
- * already unanchored at this point, just adding this clause incase
- * things happen differently.
- */
- toplevel = _gtk_widget_get_toplevel (widget);
- if (!_gtk_widget_is_toplevel (toplevel))
- toplevel = NULL;
-
- _gtk_widget_set_is_toplevel (widget, TRUE);
-
- /* When a window becomes toplevel after being embedded and anchored
- * into another window we need to unset its anchored flag so that
- * the hierarchy changed signal kicks in properly.
- */
- _gtk_widget_set_anchored (widget, FALSE);
- _gtk_widget_propagate_hierarchy_changed (widget, toplevel);
-
- toplevel_list = g_slist_prepend (toplevel_list, window);
- }
- else
- {
- _gtk_widget_set_is_toplevel (widget, FALSE);
- toplevel_list = g_slist_remove (toplevel_list, window);
- _gtk_widget_propagate_hierarchy_changed (widget, widget);
- }
- gtk_window_update_debugging ();
-}
-
/**
* gtk_window_set_auto_startup_notification:
* @setting: %TRUE to automatically do startup notification